package collection;

import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * 迭代器
 * 集合提供了同一的遍历模式
 * 可以进行删除操作
 */

public class IteratorDemo {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        c.add("#");

        //使用迭代器去遍历集合
        Iterator it = c.iterator();
        /*
        boolean hasNext()  是否还有下一个元素
        按照逻辑，下一个元素，那第一个元素怎么获取呢？
        在集合当中hasNext() 方法指向第一个元素之前
        Object next()  返回下一个元素
         */
        while(it.hasNext()){
            String s = (String) it.next();
//            if(s.equals("#")){
//                it.remove();
//            }
            // 上面的情况正常情况下是错误的 因为当我们获取到的字符串是null的时候，
            // 我们无法判断是否是#，使用equals方法会抛出空指针异常，通常使用下面的形式
            // "#"字符串在常量池子当中是一定存在的
            if("#".equals(s)){
                // 迭代器要求遍历的过程当中不可以通过集合的方法去增删元素
                // 否则会抛出异常java.util.ConcurrentModificationException
                // 迭代器提供的remove会删除本次通过next获取的元素
                it.remove();
            }
            System.out.println(s);
        }

        System.out.println(c);
    }
}
